abstract class BaseClass( label: String ) {
  def f1() = "BaseClass( " + label + " )"
}

class LevelOneSubclass( label: String ) extends BaseClass( label ) {
  override def f1() = super.f1 + "\t" + "LevelOneSubclass( " + label + " )"
}

class LevelOneOneSubclass( label: String ) extends LevelOneSubclass( label ) {
  override def f1() = super.f1 + "\t" + "LevelOneOneSubclass( " + label + " )"
}

// error: value :: is not a member of this.LevelOneSubclass
// val listOfBaseClass = new LevelOneOneSubclass( "A" ) :: new LevelOneSubclass( "B" ) 
// val listOfBaseClass List[BaseClass] = new LevelOneOneSubclass( "A" ) :: new LevelOneSubclass( "B" ) 
val listOfBaseClass = List( new LevelOneOneSubclass( "A" ), new LevelOneSubclass( "B" )  )
listOfBaseClass.foreach( bc => println( bc.f1 ) )
